package com.gitee.l0km.aocache;

/**
 * aoCache日志输出接口
 * @author guyadong
 *
 */
public interface AocacheLogger {
	/**
	 * 返回格式化的日志信息字符串<br>
	 * example:
	 * <pre>
	 * logString("name : {},age:{}","tom",23);
	 * </pre>
	 * @param format 格式字符串,采用"{}"或"%s"为占位符
	 * @param args 填充占位符的参数列表,如果数量小于占位符个数则多出的占位符填充"null"
	 */
	String logString(String format, Object ... args);
	/**
	 * 向控制台输出日志信息<br>
	 * @param format 格式字符串,采用"{}"或"%s"为占位符
	 * @param args
	 */
	void log(String format, Object ... args);
	void log(String msg,Throwable e);
	void log(Throwable e);
	/**
	 * 向控制台输出日志信息<br>
	 * @param output 是否输出
	 * @param format 格式字符串,采用"{}"或"%s"为占位符
	 * @param args
	 */
	void log(boolean output,String format, Object ... args);
	/** 哑元实例,不输出任何内容 */
	public static final AocacheLogger MUTE = new AocacheLogger() {

		@Override
		public String logString(String format, Object... args) {
			return "";
		}

		@Override
		public void log(String format, Object... args) {
			
		}

		@Override
		public void log(String msg, Throwable e) {
			
		}

		@Override
		public void log(Throwable e) {
			
		}

		@Override
		public void log(boolean output, String format, Object... args) {
		}};
		/**
		 * 默认日志输出实现
		 */
		AocacheLogger DEFAULT = new AocacheLoggerDefaultImpl();
}
